package main

import (
	"log"
	"net/http"
	"toDoList/handler"
	db "toDoList/models"

	_ "github.com/go-sql-driver/mysql"
)

// 拦截器
// cors 跨域
func handleIterceptor(h http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		// 允许访问资源服务
		w.Header().Set("Access-Control-Allow-Origin", "*")
		// 允许跨域传递http头部
		w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
		// 返回数据类型
		w.Header().Set("content-type", "application/json")
		// 添加允许请求方法
		w.Header().Add("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE")
		// TODO 异常处理拦截器
		// TODO 日志记录拦截器
		// TODO 有没有更优雅的方式？
		h(w, r)
	}
}

func main() {
	//数据库初始化
	db.InitDB()

	//路由注册
	http.HandleFunc("/create", handleIterceptor(handler.CreateHandler))
	http.HandleFunc("/put", handleIterceptor(handler.PutHandler))
	http.HandleFunc("/delete", handleIterceptor(handler.DeleteHandler))
	http.HandleFunc("/list", handleIterceptor(handler.ListHandler))

	//启动服务，在9090端口监听
	log.Fatal(http.ListenAndServe(":9090", nil))
}

